// 掌握了基本的fs模块文件操作，进行整个文件夹的删除
// 注意点：
// 1.若要全部删除，需获取所有文件名，readdir只能获取一级，须利用递归
// 2.判断是否为文件或文件夹
// 3.异步回调产生的问题

const fs = require("fs").promises;

// 删除文件
// delFile("./testToDel");
// 删除文件夹
delDir("./testToDel");

// 定义函数名，传入文件路径
async function delFile(path) {
  // 根据路径判断是否为文件或文件夹
  let isF = false;

  // 利用await等待flag回调完再判断
  await fs
    .stat(path)
    .then((data) => {
      isF = data.isFile();
    })
    .catch(ign);

  // 判断是否为文件
  if (isF) {
    // 直接unlink删除
    await fs.unlink(path).then().catch(ign);
  } else {
    //递归，delFile()
    await fs
      .readdir(path)
      .then(async (data) => {
        // 创建任务列表
        data.forEach((item) => {
          let newPath = path + "/" + item;
          delFile(newPath);
        });
      })
      .catch(ign);
  }
}

async function delDir(path) {
  await fs
    .readdir(path)
    .then(async (data) => {
      if (!data.length) await fs.rmdir(path).catch(ign);
      else {
        data.forEach(async (item) => {
          let newPath = path + "/" + item;
          delDir(newPath);
          await fs.rmdir(path).catch(ign);
        });
      }
    })
    .catch(ign);
}

// 通用异常处理函数(无返回值)
function ign(err) {
  console.log(err);
}
